home *** CD-ROM | disk | FTP | other *** search
/ Power CD / Power CD ATARI-Rechner Lieben.iso / UTILITY / LSRC_222 / LHARC.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-28  |  6.1 KB  |  286 lines

  1.  
  2. #include <limits.h>
  3. #include <ctype.h>
  4.  
  5. #include <errno.h>
  6. #include <basepage.h>
  7.  
  8. #include <string.h>
  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <unistd.h>
  12. #include <osbind.h>
  13. #include <time.h>
  14. #include <mintbind.h>
  15.  
  16. #define set_crc(crc,ch) (crc = (crc >> 8) ^ crctbl [(crc ^ (ch)) & 0xff])
  17. #define new_line()        putchar('\n')
  18.  
  19. #define _PC_CASE        6
  20. #define    _PC_CASESENS    0
  21. #define    _PC_CASECONV    1
  22. #define    _PC_CASEINSENS    2
  23.  
  24. #define PAC_NO_BUF        0
  25. #define PAC_INIT_BUF    1
  26. #define PAC_EXIT_BUF    2
  27.  
  28. #define BUFFERSIZ    8192L
  29. #define    FILEBUFSIZ    16384L
  30.  
  31. #define MAXBUFFER    (1L<<17)
  32. #define MAXBUFFERL2    (1L<<19)
  33.  
  34. #define DICBIT        13
  35. #define DICSIZ        (1U<<DICBIT)
  36.  
  37. #define MATCHBIT    8
  38. #define MAXMATCH    256
  39.  
  40. #define THRESHOLD    2
  41. #define PERC_FLAG    0x8000U
  42. #define NC            (UCHAR_MAX+MAXMATCH+1-THRESHOLD)
  43. #define CBIT        9
  44. #define CODE_BIT    16
  45.  
  46. #define NP            (DICBIT+1)
  47. #define NT            (CODE_BIT+3)
  48.  
  49. #define PBIT        4
  50. #define TBIT        5
  51.  
  52. #if NT > NP
  53. #define NPT    NT
  54. #else
  55. #define NPT NP
  56. #endif
  57.  
  58. #define MAX_HASH_VAL    (3*DICSIZ+((DICSIZ>>9)+1)*UCHAR_MAX)
  59.  
  60. #define MAXPATH        224
  61. #define MAXCOMMENT    1024
  62. #define MAXEXT        1280
  63. #define MAX_PAT     1024
  64. #define MAX_EXCLD    128        
  65. #define MAX_ARC        512
  66.  
  67. #define N            4096
  68. #define F            18
  69. #define NIL         N
  70.  
  71. #define UNKNOWNERR    0
  72. #define INVCMDERR    1
  73. #define MANYPATERR    2
  74. #define NOARCNMERR    3
  75. #define NOFNERR     4
  76. #define NOARCERR    5
  77. #define RENAMEERR    6
  78. #define MKTMPERR    7
  79. #define DUPFNERR    8
  80. #define TOOMANYERR    9
  81. #define TOOLONGERR    10
  82. #define NOFILEERR    11
  83. #define MKFILEERR    12
  84. #define RDERR        13
  85. #define WTERR        14
  86. #define MEMOVRERR    15
  87. #define INVSWERR    16
  88. #define CTRLBRK     17
  89. #define NOMATCHERR    18
  90. #define COPYERR     19
  91. #define NOTLZH        20
  92. #define OVERWT        21
  93. #define MKDIR        22
  94. #define MKDIRERR    23
  95. #define CRCERR        24
  96. #define RDONLY        25
  97.  
  98. #define EXTEND_GENERIC        0
  99. #define EXTEND_UNIX            'U'
  100. #define EXTEND_ATARI        'A'
  101. #define EXTEND_MSDOS        'M'
  102. #define EXTEND_MACOS        'm'
  103. #define EXTEND_OS9            '9'
  104. #define EXTEND_OS2            '2'
  105. #define EXTEND_OS68K        'K'
  106. #define EXTEND_OS386        '3'
  107. #define EXTEND_HUMAN        'H'
  108. #define EXTEND_CPM            'C'
  109. #define EXTEND_FLEX            'F'
  110. #define EXTEND_RUNSER        'R'
  111. #define EXTEND_TOWNSOS        'T'
  112. #define EXTEND_XOSK            'X'
  113.  
  114. #define    TEXT        (DICSIZ*2+MAXMATCH)
  115. #define LEVEL        ((DICSIZ+UCHAR_MAX+1)*sizeof(*level))
  116. #define CHILDCOUNT    ((DICSIZ+UCHAR_MAX+1)*sizeof(*childcount))
  117. #define POSITION    ((DICSIZ+UCHAR_MAX+1)*sizeof(*position))
  118. #define PARENT        (DICSIZ*2*sizeof(*parent))
  119. #define PREV        (DICSIZ*2*sizeof(*prev))
  120. #define    NEXT        ((MAX_HASH_VAL+1)*sizeof(*next))
  121. #define ENCODE5        (TEXT+LEVEL+CHILDCOUNT+POSITION+PARENT+PREV+NEXT+128)
  122.  
  123. #define LSON        ((N+1)*sizeof(*lson))
  124. #define RSON        ((N+257)*sizeof(*rson))
  125. #define DAD            ((N+1)*sizeof(*dad))
  126. #define ENCODE        (LSON+RSON+DAD+128)
  127.  
  128. #define FAULT        0
  129. #define SUCCS        ~FAULT
  130.  
  131. #define COM_ID        "-com-"
  132.  
  133. #define EXCLUDE        '!'
  134. #define FILE_LIST    '@'
  135. #define TEMPFILE    "LHA)(T)(."
  136.  
  137. #define MINHDR        20
  138. #define HDRSIZ0        22
  139. #define HDRSIZ1        25
  140. #define HDRSIZ2        24
  141.  
  142. #define ITIME(t)    itime((ulong *) &t)
  143. #define getch()        gemdos(0x08)
  144.  
  145. typedef unsigned char    uchar;
  146. typedef unsigned int    uint;
  147. typedef unsigned short    ushort;
  148. typedef unsigned long    ulong;
  149.  
  150. typedef unsigned long    clock_t;
  151. typedef struct
  152. {
  153.     uchar    *ptr;
  154.     long    cnt;
  155.     uchar    *base;
  156.     long    len;
  157. } OutRec;
  158.  
  159. extern OutRec outrec;
  160.  
  161. typedef struct
  162. {
  163.     void    *next;
  164.     _DOSTIME time;
  165.     int        cluster;
  166.     uchar    fpos,cpos,flag,Case,attr;
  167.     uchar    dir[MAXPATH];
  168. } filebuf;
  169.  
  170. typedef struct
  171. {
  172.     uchar        HeadSiz,HeadChk,HeadID[5];
  173.     ulong        PacSiz,OrgSiz;
  174.     _DOSTIME    Ftime;
  175.     uchar        Attr,Level;
  176.     uchar        Fname[MAXPATH];
  177. #if 0
  178.     _DOSTIME    Mtime;
  179. #endif
  180.     uint        crc;
  181. } LzHead;
  182.  
  183. typedef struct
  184. {
  185.     unsigned hour:5;
  186.     unsigned min:6;
  187.     unsigned sec:5;
  188.     unsigned year:7;
  189.     unsigned mon:4;
  190.     unsigned day:5;
  191. } ftime;
  192.  
  193. typedef struct xattr {
  194.     ushort    mode;
  195.     long    index;
  196.     ushort    dev;
  197.     ushort    reserved1;
  198.     ushort    nlink;
  199.     ushort    uid;
  200.     ushort    gid;
  201.     long    size;
  202.     long    blksize;
  203.     long    nblocks;
  204.     short    mtime, mdate;
  205.     short    atime, adate;
  206.     short    ctime, cdate;
  207.     short    attr;
  208.     short    reserved2;
  209.     long    reserved3[2];
  210. } XATTR;
  211.     
  212. #define METHOD_TYPE_STRAGE 5
  213.  
  214. extern    int __mint,bad_tab,*rson,*lson,*dad,bitcount,blkcnt,RotInd;
  215. extern    int match_position,match_length,matchlen,ship,star;
  216. extern    uint crc,crc_u,crctbl[],subbitbuf,bitbuf;
  217. extern    FILE *infile,*outfile;
  218. extern    long textsize,codesize,compsize,blocksize;
  219. extern    uchar flg_n,flg_5,*text,*childcount,text_buf[],*level;
  220. extern    short matchpos,*position,*parent,*prev,*next;
  221. extern    ulong origsize;
  222. extern    ushort *sortptr;
  223.  
  224. long    afxonoff(long);
  225. int        Attrib(uchar *);
  226. uchar    *backpath(uchar *);
  227. int        Bgetc(FILE*);
  228. void    buf_putc(int);
  229. void    block_crc(long,uchar *);
  230. int     chk_wild(uchar *,uchar *,int);
  231. void    copyfile(FILE *,FILE *,long,int,int);
  232. void    count_len(int);
  233. int        crc_getc(FILE *);
  234. void    Decode(void);
  235. int        decode5(uint,uchar*);
  236. int        decode_lh5(ulong,ulong);
  237. void    DecodeOld(void);
  238. void    delete_node(void);
  239. void    DeleteONode(int);
  240. void    dos_2_unixtime(void *);
  241. void    Encode(void);
  242. void    encode5(void);
  243. void    EncodeOld(void);
  244. void    end_huf(void);
  245. void    error(int,uchar*,int);
  246. void    fillbuf(int);
  247. int     fread_crc(uchar*,int,FILE*);
  248. ulong    FTimeToULong(_DOSTIME*);
  249. uint    getbits(int);
  250. void    get_comment(FILE*);
  251. uchar    *get_fname(uchar*);
  252. void    get_next_match(void);
  253. void    huf_encode_end(void);
  254. void    huf_encode_start(void);
  255. void    ilong(ulong*);
  256. void    itime(ulong*);
  257. void    InitTree(void);
  258. void    init_encode5(void);
  259. void    insert_node(void);
  260. void    InsertONode(int);
  261. void    MakeBuffers(void);
  262. int        make_table(int,uchar*,int,ushort*);
  263. int     make_tree(int,ushort*,uchar*,ushort*);
  264. int        matchpattern(uchar*,uchar*);
  265. void    mkcrc(void);
  266. uchar    mksum(LzHead*,int);
  267. void    OpenOut(void);
  268. void    output(uint,uint);
  269. void    output5(uint,uint);
  270. void    ProcInd(void);
  271. void    putbits(int,uint);
  272. int        read_pt_len(int,int,int);
  273. int     read_c_len(void);
  274. int        search_lzh(FILE*,FILE*,int);
  275. void    send_block(void);
  276. void    shipout(void);
  277. void    ShipOut(void);
  278. int     slash(uchar *,int);
  279. uchar    *stpcpy(uchar*,uchar*);
  280. int     test_afx(uchar*);
  281. void    TruncFile(uchar *);
  282. int     tstID(uchar *);
  283. void    unix2dos(uchar *,int);
  284. void    unix_2_dostime(void *);
  285. void    yen2slash(uchar *);
  286.